package com.yx.enterresourceplanning.service.serviceImpl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yx.enterresourceplanning.entity.HandleJson.DataItem;
import com.yx.enterresourceplanning.entity.HandleJson.PosItem;
import com.yx.enterresourceplanning.entity.HandleJson.PrismWordItem;
import com.yx.enterresourceplanning.entity.HandleJson.ResultInfo;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class HandleJsonServiceImpl{

    public static String HandleJsonMapper(String jsonInput) throws JsonProcessingException {
        // 初始化Jackson的ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(jsonInput);
        // 构建Vue data对应的resultInfo列表
        ResultInfo resultInfo = new ResultInfo();
        List<DataItem> dataItems = new ArrayList<>();
        // 1. 映射顶层键值（content、height、width等）
        dataItems.add(new DataItem("content", rootNode.get("content").asText()));
        dataItems.add(new DataItem("height", rootNode.get("height").asText()));
        dataItems.add(new DataItem("width", rootNode.get("width").asText()));
        dataItems.add(new DataItem("orgheight", rootNode.get("orgHeight").asText())); // 注意Vue中是orgheight（小写h）
        dataItems.add(new DataItem("orgwidth", rootNode.get("orgWidth").asText()));   // Vue中是orgwidth（小写w）
        dataItems.add(new DataItem("prism_wnum", rootNode.get("prism_wnum").asText()));
        // 2. 映射prism_wordsInfo（包含多个子项）
        List<DataItem> prismWordsList = new ArrayList<>();
        JsonNode wordsInfoArray = rootNode.get("prism_wordsInfo");
        if (wordsInfoArray.isArray()) {
            for (JsonNode wordNode : wordsInfoArray) {
                PrismWordItem wordItem = new PrismWordItem();
                // 映射direction、height、width、prob、word
                wordItem.getPrismWordInfo().add(new DataItem("direction", wordNode.get("direction").asText()));
                wordItem.getPrismWordInfo().add(new DataItem("height", wordNode.get("height").asText()));
                wordItem.getPrismWordInfo().add(new DataItem("width", wordNode.get("width").asText()));
                wordItem.getPrismWordInfo().add(new DataItem("prob", wordNode.get("prob").asText()));
                wordItem.getPrismWordInfo().add(new DataItem("word", wordNode.get("word").asText()));
                // 映射pos（包含x1,y1,x2,y2,x3,y3,x4,y4）
                PosItem posItem = new PosItem();
                JsonNode posArray = wordNode.get("pos");
                if (posArray.isArray() && posArray.size() == 4) {
                    // 第一个点(x1,y1)
                    posItem.getPosInfo().add(new DataItem("x1", posArray.get(0).get("x").asText()));
                    posItem.getPosInfo().add(new DataItem("y1", posArray.get(0).get("y").asText()));
                    // 第二个点(x2,y2)
                    posItem.getPosInfo().add(new DataItem("x2", posArray.get(1).get("x").asText()));
                    posItem.getPosInfo().add(new DataItem("y2", posArray.get(1).get("y").asText()));
                    // 第三个点(x3,y3)
                    posItem.getPosInfo().add(new DataItem("x3", posArray.get(2).get("x").asText()));
                    posItem.getPosInfo().add(new DataItem("y3", posArray.get(2).get("y").asText()));
                    // 第四个点(x4,y4)
                    posItem.getPosInfo().add(new DataItem("x4", posArray.get(3).get("x").asText()));
                    posItem.getPosInfo().add(new DataItem("y4", posArray.get(3).get("y").asText()));
                }
                // 将pos添加到当前word的信息中
                wordItem.getPrismWordInfo().add(new DataItem("pos", posItem.getPosInfo()));
                // 将当前word的信息添加到prism_wordsInfo列表
                prismWordsList.add(new DataItem("prism_wordsInfo_item", wordItem.getPrismWordInfo()));
            }
        }

// 将prism_wordsInfo添加到顶层dataItems
        dataItems.add(new DataItem("prism_wordsInfo", prismWordsList));

        // 最终组装resultInfo
        resultInfo.setResultInfo(dataItems);
// 输出映射结果（可保存为JSON或其他格式）
        return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultInfo);

    }
}
